/**
 * Description:
 * Class Name:NewDatePackageTest
 * Date:2022/2/21 18:42
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第7章_Java基础类库._7_4_Java8的日期_时间类._7_4_3_新的日期_时间包;

import java.time.*;

public class NewDatePackageTest {
    public static void main(String[] args) {
        // -----下面是关于Clock的用法----------
        // 获取当前Clock
        var clock = Clock.systemUTC();
        // 通过Clock获取当前时刻
        System.out.println("当前时刻为：" + clock.instant());
        // 获取clock对应的毫秒数，与System.currentTimeMillis()相同
        System.out.println(clock.millis());
        System.out.println(System.currentTimeMillis());

        // -----下面是关于Duration的用法-------
        var d = Duration.ofSeconds(6000);       // 这是6000秒的时间段的意思
        System.out.println("6000秒相当于" + d.toMinutes() + "分");
        System.out.println("6000秒相当于" + d.toHours() + "时");
        System.out.println("6000秒相当于" + d.toDays() + "天");
        // 在clock基础上增加该时间段，然后返回一个新的clock
        var clock2 = Clock.offset(clock, d);
        // 可以看到clock2与clock相差1小时40分
        System.out.println("当前时刻相加6000秒为：" + clock2.instant());

        // ------下面是关于Instant类的用法--------
        // 获取当前时间
        var instant = Instant.now();
        System.out.println(instant);
        // 为Instant类的实例添加6000秒，然后返回为新的instant2
        var instant2 = instant.plusSeconds(6000);
        System.out.println(instant2);
        // 根据字符串解析Instant对象
        var instant3 = Instant.parse("2014-02-23T10:12:35.342Z");
        System.out.println(instant3);
        // 在instant3的基础上增加5小时4分钟
        var instant4 = instant3.plus(Duration.ofHours(5).plusMinutes(4));
        System.out.println(instant4);
        // 获取instant4的5天以前的时刻
        var instant5 = instant4.minus(Duration.ofDays(5));
        System.out.println(instant5);

        // -------下面是关于LocalDate的用法---------
        var localdate = LocalDate.now();
        System.out.println(localdate);
        // 获取2022年的第146天
        localdate = LocalDate.ofYearDay(2022, 146);
        System.out.println(localdate);                              // 2022-
        // 设置为2022年的5月21日
        localdate = LocalDate.of(2014, Month.MAY, 21);
        System.out.println(localdate);

        // ------下面是LocalTime的用法-------------
        // 获取当前时间
        var localtime = LocalTime.now();
        // 设置为22点23分
        localtime = LocalTime.of(22, 23);
        System.out.println(localtime);
        // 返回一天中的第5503秒
        localtime = LocalTime.ofSecondOfDay(5503);
        System.out.println(localtime);

        // -------下面是LocalDateTime的用法---------
        // 获取当前日期、时间
        var localdatetime = LocalDateTime.now();
        // 当前日期、时间加上25小时3分钟
        var future = localdatetime.plusHours(25).plusMinutes(3);
        System.out.println("当前日期、时间加上25小时3分钟后为：" + future);

        // ------下面是Year、YearMonth、MonthDay的用法--------
        var year = Year.now();
        System.out.println("当前年份为：" + year);
        year = year.plusYears(5);           // 当前年份再加5年
        System.out.println("当前年份再加5年为：" + year);
        // 根据指定月份获取YearMonth
        var ym = year.atMonth(10);
        System.out.println(year + "年10月：" + ym);        // 输出xxxx-10，xxxx代表当前年份
        // 当前年月再加5年、减3个月
        ym = ym.plusYears(5).minusMonths(3);
        System.out.println("当前年月再加5年、减3个月：" + ym);
        var md = MonthDay.now();
        System.out.println("当前月日为：" + md);
        // 设置为5月23日
        var md2 = md.with(Month.MAY).withDayOfMonth(23);
        System.out.println("5月23日为：" + md2);
    }
}
